package com.siashan.toolkit.crypt.symmetric;

/**
 * DESede是由DES对称加密算法改进后的一种对称加密算法，又名3DES、TripleDES。<br>
 * 使用 168 位的密钥对资料进行三次加密的一种机制；它通常（但非始终）提供极其强大的安全性。<br>
 * 如果三个 56 位的子元素都相同，则三重 DES 向后兼容 DES。<br>
 * Java中默认实现为：DESede/ECB/PKCS5Padding
 * 
 * @author siashan
 * @since 1.0.7
 */
public class DESede extends SymmetricCrypt {
	private static final long serialVersionUID = 1L;

	// ------------------------------------------------------------------------- Constructor start
	/**
	 * 构造，默认DESede/ECB/PKCS5Padding，使用随机密钥
	 */
	public DESede() {
	}

	@Override
	public SymmetricAlgorithm getAlgorithm() {
		return SymmetricAlgorithm.DESede;
	}

	/**
	 * 构造，使用随机密钥
	 * 
	 * @param mode 模式{@link Mode}
	 * @param padding {@link Padding}补码方式
	 */
	public DESede(Mode mode, Padding padding) {

		super(SymmetricAlgorithm.DESede,mode, padding);
	}

	// ------------------------------------------------------------------------- Constructor end

	/**
	 * 构建加密算法类
	 * <p>默认实现：DES/CBC/PKCS5Padding </p>
	 *
	 * @return 加密算法类
	 */
	public static  SymmetricCrypt build(){
		return build(Mode.CBC,Padding.PKCS5Padding);
	}

	/**
	 * 构建加密算法类
	 *
	 * @param mode      密码模式
	 * @param padding   填充模式
	 * @return  加密算法类
	 */
	public static  DESede build(Mode mode,Padding padding){
		return new DESede(mode,padding);
	}
}
